文件位置
systemd有系统和用户区分;系统(/user/lib/systemd/system/)、用户(/etc/lib/systemd/user/),一般系统管理员手工创建的单元文件存放在/etc/systemd/system/目录下面。
部分配置文件的区块
[Unit]区块
- Description:简短描述
- Documentation:文档地址
- Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
- Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
- BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
- Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
- After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
- Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行
- Condition...:当前 Unit 运行必须满足的条件,否则不会运行
- Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败
[Service]区块
Type:定义启动时的进程行为。它有以下几种值。
- simple:默认值,执行ExecStart指定的命令,启动主进程
- forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
- oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
- dbus:当前服务通过D-Bus启动
- notify:当前服务启动完毕,会通知Systemd,再继续往下执行
- idle:若有其他任务执行完毕,当前服务才会运行
ExecStart:启动当前服务的命令
ExecStartPre:启动当前服务之前执行的命令
ExecStartPost:启动当前服务之后执行的命令
ExecReload:重启当前服务时执行的命令
ExecStop:停止当前服务时执行的命令
ExecStopPost:停止当其服务之后执行的命令
RestartSec:自动重启当前服务间隔的秒数
Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
Environment:指定环境变量
[Install]区块
- Alias:为单元提供一个空间分离的附加名字。
- RequiredBy:单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息。
- WantBy:单元被允许运行需要的弱依赖性单元,Wantby从Want列表获得依赖信息。
- Also:指出和单元一起安装或者被协助的单元。
- DefaultInstance:实例单元的限制,这个选项指定如果单元被允许运行默认的实例。
配置文件示例
[Unit]
Description=Brook Service # 描述
Documentation=https://txthinking.github.io/brook/ # 文档链接
After=network.target nss-lookup.target # 启动的前置为网络服务
[Service]
User=root # 用户
Type=simple # 默认值,执行ExecStart指定的命令,启动主进程
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW # 允许执行网络管理任务和原始套接字
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW # 允许执行网络管理任务和原始套接字
NoNewPrivileges=true # 该服务的所有进程与子进程都不可以获得任何新权限。
ExecStart=brook server --listen :8888 --password 123456 # 启动当前服务的命令